welo git mirrors
Commit 30498bbbe3820973b73eec32f7f56558c2a04fd1
Parents : d7f1c5f
Author : welo | main nixos computer <empty@empty.com>
Date : 2026-07-03T16:13:01+01:00
added relay for udp for testing
Changes
Diff
diff --git a/src/relay.rs b/src/relay.rs
index ede6d91..83fa500 100644
--- a/src/relay.rs
+++ b/src/relay.rs
@@ -1,5 +1,7 @@
//! Bidirectional TCP ↔ RNS relay — used by both client and server sessions.
+use std::sync::Arc;
+
use log::{debug, warn};
use tokio::io::{AsyncReadExt, AsyncWriteExt};
use tokio::sync::mpsc;
@@ -10,7 +12,7 @@ use crate::mux::MuxHandle;
/// Relay data bidirectionally between a TCP stream and an RNS mux session.
///
/// Sends a `Close` frame and drops the session when either direction finishes.
-pub async fn relay_bidirectional(
+pub async fn relay_bidirectional_tcp(
sid: u32,
stream: tokio::net::TcpStream,
mux: MuxHandle,
@@ -60,3 +62,55 @@ pub async fn relay_bidirectional(
mux.send(FrameType::Close, sid, Vec::new());
mux.drop_session(sid);
}
+
+pub async fn relay_bidirectional_udp(
+ sid: u32,
+ stream: tokio::net::UdpSocket,
+ mux: MuxHandle,
+ mut session_rx: mpsc::UnboundedReceiver<Frame>,
+) {
+ let socket = Arc::new(stream);
+ let socket1 = socket.clone();
+ let mux_fwd = mux.clone();
+
+ // TCP -> RNS
+ let tcp_to_rns = tokio::spawn(async move {
+ let mut buf = [0u8; 4096];
+ loop {
+ match socket.recv(&mut buf).await {
+ Ok(0) => break,
+ Ok(n) => {
+ mux_fwd.send(FrameType::Data, sid, buf[..n].to_vec());
+ }
+ Err(e) => {
+ debug!("[{}] TCP read error: {}", sid, e);
+ break;
+ }
+ }
+ }
+ });
+
+ // RNS -> TCP
+ let rns_to_tcp = tokio::spawn(async move {
+ while let Some(frame) = session_rx.recv().await {
+ match frame.frame_type {
+ FrameType::Data => {
+ if let Err(e) = socket1.send(&frame.payload).await {
+ warn!("[{}] TCP write error: {}", sid, e);
+ break;
+ }
+ }
+ FrameType::Close => break,
+ _ => {}
+ }
+ }
+ });
+
+ tokio::select! {
+ _ = tcp_to_rns => {},
+ _ = rns_to_tcp => {},
+ }
+
+ mux.send(FrameType::Close, sid, Vec::new());
+ mux.drop_session(sid);
+}
diff --git a/src/server.rs b/src/server.rs
index c22add1..4bd828f 100644
--- a/src/server.rs
+++ b/src/server.rs
@@ -224,7 +224,7 @@ async fn handle_server_session_tcp(
mux.send(FrameType::ConnectOk, sid, Vec::new());
// Data relay (shared implementation)
- relay_bidirectional(sid, stream, mux, session_rx).await;
+ relay_bidirectional_tcp(sid, stream, mux, session_rx).await;
info!("[{}] Closed", sid);
}
@@ -269,6 +269,6 @@ async fn handle_server_session_udp(
mux.send(FrameType::ConnectOk, sid, Vec::new());
// Data relay (shared implementation)
- // relay_bidirectional(sid, stream, mux, session_rx).await;
+ relay_bidirectional_udp(sid, stream, mux, session_rx).await;
info!("[{}] Closed", sid);
}
Served by rngit 1.4.2 - Generated in 0.02s